package myutil

import "reflect"

// FieldInfo 存储字段信息的结构体
type FieldInfo struct {
	FieldName string // 字段名（英文）
	//JsonTag         string // json字段名
	MapStructureTag string // mapstructure标签
	Index           int    // 字段在结构体中的索引
}

// GetFieldInfo 获取结构体字段信息（按声明顺序）
func GetFieldInfo(obj any) []FieldInfo {
	var fields []FieldInfo
	objType := reflect.TypeOf(obj)

	// 处理指针
	if objType.Kind() == reflect.Ptr {
		objType = objType.Elem()
	}

	// 遍历结构体字段（按声明顺序）
	for i := 0; i < objType.NumField(); i++ {
		field := objType.Field(i)
		if field.PkgPath != "" { // 排除私有字段（小写开头）
			continue
		}

		fields = append(fields, FieldInfo{
			FieldName:       field.Name,
			MapStructureTag: field.Tag.Get("mapstructure"), // 无标签时为空字符串
			//JsonTag:         field.Tag.Get("json"),         // 无标签时为空字符串
			Index: i,
		})
	}
	return fields
}
